//
//  main.m
//  02-ClassAndObject
//
//  Created by dllo on 16/7/5.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
   
    /*********************快捷键用法********************/
    
    //1.常用快捷键
    //command + 0 开/收起左边栏
    //command + option(键盘上Alt) + 0 开/收右边栏
    //command + shift + 0 打开Xcode的API文档
    //command + shift + Y 开/收下边栏
    //command + R 运行(在浏览器中是刷新)
    //command + B 编译
    //command + Z 撤销
    //command + shift + Z 反撤销
    //command + N 新建文件
    //command + shift + N 新建工程
    //command + C 复制
    //command + V 粘贴
    //command + shift + 3 全屏截图
    //command + shift + 4 部分截图
    //command + shift + 4 + 空格 截取选择窗口
    //command + / 注释掉已选择代码
    //command + delete 删除
    //command + shift + delete 清空回收站
    //command + M 最小化窗口
    //command + shift + S 另存为
    //command + W 关闭
    //command + Q 退出

    //2.移动光标
    //command + ← 移动到当前行的最左边
    //command + → 移动到当前行的最右边
    //command + ↑ 移动到所有行的第一行起始位置
    //command + ↓ 移动到所有行的最后一行起始位置
    
    //3.选中文字
    //shift + ← 选中向左一个字
    //shift + → 选中向右一个字
    //shift + ↑ 从当前光标位置开始,选中向上一行,对应位置
    //shift + ↓ 从当前光标位置开始,选中向下一行,对应位置
    
    //command + shift + → 选中光标开始,右边所有的文字
    //command + shift + ↑ 选中光标开始,上边所有的文字
    //command + shift + ← 选中光标开始,左边所有的文字
    //command + shift + ↓ 选中光标开始,下边所有的文字
    
    //4.移动文字
    //command + option + [ 将选中文字整体向上移动
    //command + option + ] 将选中文字整体向下移动
    
    //ctrl + ← 切换当前屏幕界面
    
    //********************类和对象********************/
    
    // 类: 一个具有相同特征和行为的事物抽象集合
    // 对象: 类的实例, 也称作类的实现.
    // 面向对象的思想,万物都是对象;面向对象的语言是面向对象思想的具体体现.
    // OOP(Object Oriented Programming) 面向对象编程; OOD 面向对象设计
    // 面向对象三大特征(特性): 封装 继承 多态 其作用为提高代码复用率
    
    // Objective-C(简称OC)
    // 1. 与C语言的区别: OC属于C语言的扩展, OC有类的概念, OC中声明属性和方法在.h中, OC中具体的实现在.m中, .mm 是C++文件,在此文件中可以编写C++代码
    // 2. OC中根类是NSObject
    // 3. 创建OC的实例
    // 1). 消息语法 [object doSomething]: 解释为向object对象去发送一个doSomething的方法, 让他去调用
    // 类方法的调用(由类名去调用它的方法, 是 + 方法)
    // 例: + alloc 开辟内存空间
    NSObject *objc = [NSObject alloc];
    // 实例方法的调用(由对象去调用, 是 - 方法)
    // 例: - init 初始化
    NSObject *newObjc = [objc init];
    // 创建一个Person对象
    Person *per = [[Person alloc]init];
    //@public的实例变量可以直接通过->赋值 ->取值
    per->_age = 19;
    NSLog(@"age = %ld", per->_age);
    //@protected的成员不能通过->去访问
    //由于受保护而不能访问,所以用如下的set get方法来实现访问
    [per setName:@"张三"];
    NSLog(@"他是%@", [per getName]);
    
    //id 与 instancetype区别
    //instancetype在作为参数返回值的时候与id是一样的,系统编译器会把id类型转成instancetype(即当前对象类型)
    //id可以作为变量类型去使用,但是instancetype不可以
    //例:
    id *obj = [[Person alloc]init];//这样写没有错
    //instancetpye *obj = [[Person alloc]init];//这种表达不可以

    /********************代码规范要求*********************/
    //1.+与-后面加空格
    //2.init后用驼峰命名法
    //3.参数名首字母小写,后续单词遵循驼峰(叫小驼峰命名法)
    //4.参数与参数间可以以回车区分,回车后参数间的冒号是对齐的
    //5.在实现部分的一对儿大括号中,第一个大括号要与前面的参数有个空格
    //6.注释部分的双斜杠要与后面的文字间有一个空格
    //7.写属性时候注意括号前后有空格.例子:@property (nonatomic, retain) NSString *name;
    //8.多参数的方法声明时, 多参数的参数名部分是小写
    
    return 0;
}
